草庐IT

C++ 运算符 [] 魔法

全部标签

c++ - sizeof 运算符的问题

因为我想在函数中动态查找数组大小,所以我使用了sizeof运算符。但是我得到了一些意想不到的结果。这是一个演示程序,向您展示我想做什么。//------------------------------------------------------------------------------------------#includevoidgetSize(int*S1){intS_size=sizeofS1/sizeof(int);std::cout编译命令:g++demo1.cc-odemo1{fedora12}输出:arraysize(infunction):2arraysize

c++ - 128 位数字的位移位运算

假设我有一个由4个32位整数组成的数组,我用它来存储128位数字如何对这个128位数字进行左右移位?谢谢! 最佳答案 使用uint128?如果可以,请使用专为此设计的x86SSE指令。(然后,当您对值进行位移后,就可以进行其他128位操作了……)SSE2移位平均需要4条指令,一个分支(一个case语句)。移动超过32位也没有问题。执行此操作的完整代码是使用gcc内在函数而不是原始汇编程序,位于sseutil.c(github:"UnusualusesofSSE2")中——它比粘贴在这里有意义的大一些。许多人在使用SSE2时遇到的障碍

c++ - 在模板类上重载 << 运算符

我已经为链表中的节点制作了一个模板类,我试图通过重载#includeusingnamespacestd;templateclassNode;templateclassNode{private:voiddeletePointer(NType*p);public:NTypedata;Node*prev,*next;templatestructis_pointer{staticconstboolvalue=false;};templatestructis_pointer{staticconstboolvalue=true;};Node();Node(NTypedata);~Node();};

C++运算符重载和多态性

多态性和运算符重载混合在一起了吗?没有指针就无法实现多态性,如thisanswer中所述。而且你不能像解释的那样用指针重载运算符here.所以真的没有办法做到这一点,对吧? 最佳答案 是的。您没有正确阅读答案。这是一个简短的演示:#includeusingnamespacestd;structX{intvalue;virtualvoidoperator+=(intx){value+=x;}};structY:X{virtualvoidoperator+=(intx){value*=x;}};voiddo_stuff(X&x){x+=

javascript - 浮点表示似乎可以正确地进行整数运算——为什么?

我一直在玩弄float,根据我过去对它们的了解,0.1+0.2最终变成了类似0.30000000000000004并不让我吃惊。然而,让我感到惊讶的是,整数运算总是似乎工作得很好并且没有任何这些工件。我首先在JavaScript(node.js中的ChromeV8)中注意到了这一点:0.1+0.2==0.3//false,NOTsurprising123456789012+18==123456789030//true22334455667788+998877665544==23333333333332//true1048576/1024==1024//trueC++(MacOSX上的g

c++ - 在 C++ 中,如果两个对象都重载运算符 << 会发生什么?一个<<乙

我以为在coutcout对象有一个运算符重载,所以我们可以传递strings进入cout对象成员函数。但在某些示例代码中,我看到一个类中定义了运算符重载。classGenericPlayer:publicHand{..friendostream&operator即使不是,如果两者都怎么办cout和aGenericPlayer过载operator? 最佳答案 Evenifitisnot,whatifbothcoutandaGenericPlayeroverloadoperatorstd::cout是一个std::ostream对象,所

c++ - #在c++中定义一个特殊的运算符

假设我想在两个对象之间在C++中组成一个特殊的运算符!+。例如,我想使用!+,因为我认为它比任何其他运算符都更有意义。我能做的一件基本事情是找到一个免费的、未使用的运算符并使用#define进行替换:#define!+%classmyclass{public:intoperator%(myclass&c){return3;}}所以如果我以后写类似的东西a!+b对于myclass的a和b实例,它会起作用。现在,有没有什么方法可以用运算符来定义它,而不是用一些函数来定义它?像这样的东西:#definea!+b->a.operatorexclamativeplus(b)这将使翻译变得不那么脏

c++ - 使用一个数字数据成员为类定义所有比较运算符的便捷方法?

如果我有一个由单个数字数据成员(例如,int)和各种方法组成的类型,是否有一种方便的方法告诉编译器自动生成所有明显的比较运算符?即,代替这个(对于C++03,当然使用inline而不是constexpr):classMyValueType{private:intmyvalue;public:constexprbooloperator(MyValueTyperhs)const{returnmyvalue>rhs.myvalue;}constexprbooloperator>=(MyValueTyperhs)const{returnmyvalue>=rhs.myvalue;}constex

具有预增量 : With or without parentheses is the same? 的 C++ 箭头运算符

类(class)问题:Watchtheparenthesesaroundtheargumentofthe++operator.Aretheyreallyneeded?Whatwillhappenwhenyouremovethem?最初只有一个cout表达式。我添加了另一个以查看差异,如下所示:#includeusingnamespacestd;classClass{public:Class(void){coutvalue=0;coutvalue)value)我的想法是在没有括号的情况下再次测试它,看看有什么不同:...coutvaluevalue两种情况下的结果是一样的。因此我得出结论

C++ 赋值运算符和重载

我想知道为什么下面的代码可以编译成功。#include#includeusingnamespacestd;classInteger{private:inti;public:Integer(intvalue):i(value){}//unaryorbinaryconstIntegeroperator+(constInteger&rv){cout我不明白为什么d=8是可能的。d是用户定义的类型。我没有为Integer类重载赋值运算符。是否有默认的重载运算符? 最佳答案 您还没有声明Integer构造函数explicit,因此它充当从in